package com.snail.ron.design.singleton;

import java.io.Serializable;

/**
 * @author xueguoping
 * @desc: TODO 饿汉
 *
 * 比较常见的一种写法。在类加载的时候就对实例进行初始化，没有线程安全问题；
 * 获取实例的静态方法没有使用同步，调用效率高；
 * 但是没有懒加载，如果该实例从始至终都没有被使用过，会造成内存浪费
 *
 * 总结：线程安全，非懒加载、效率高。
 * 是否推荐：可以使用，但也不推荐
 * @date 2022/4/1110:27
 */
public class SingletonOne implements Serializable {
    //私有构造
    private SingletonOne(){
        if(null != instance){
            throw new RuntimeException("禁止反射调用默认构造");
        }
    }

    //自动生成
    private static final SingletonOne instance = new SingletonOne();

    //公共对外提供实例方法
    public static SingletonOne getInstance(){
        return instance;
    }

    //防止序列化攻击
    private Object readResolve(){
        return instance;
    }
}
